package com.devframe.web.taglib;

import java.util.Date;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;

import com.devframe.sys.util.common.DateUtils;


/**
 * 
 * <pre>
 * &lt;b&gt;&lt;font color=&quot;blue&quot;&gt;SelectTag&lt;/font&gt;&lt;/b&gt;
 * </pre>
 * 
 * <pre>
 * &lt;b&gt; --日期时间输出--&lt;/b&gt;
 * </pre>
 * </pre>
 * <pre>
 * &lt;b&gt;--样例--&lt;/b&gt;
 *   &gt;d:dateTime value="${log.logDate}"/>
 * </pre>
 * 
 * JDK版本：JDK1.4
 * 
 * 
 */
public class DateTimeTag extends AbstractBaseTag {
	/**
     * serialVersionUID
     */
    private static final long serialVersionUID = 932991928216241306L;

    
	/**
	 * 显示值，支持EL表达式
	 */
	private Object value = null; // 

	
	/**
	 * format 日期时间格式类型
	 * 1表示 yyyymmdd 或yyyymmddHHMiSS 
	 * 2用连字符-分隔的时间时间格式串，如yyyy-mm-dd 或yyyy-mm-dd HH:Mi:SS 
	 * 3用连字符.分隔的时间时间格式串，如yyyy.mm.dd 或yyyy.mm.dd HH:Mi:SS 
	 * 4用中文字符分隔的时间格式串，如yyyy年mm月dd 或yyyy年mm月dd HH:Mi:SS
	 */
	private Integer format;
	
	/**
	 * formatStr
	 * 日期格式字符串
	 */
	private String formatStr;
	
	/**
	 * length 长度，用于截取格式化后的字符
	 */
	private Integer length;

	// ////////////////////////////////////////////
	/**
	 * 标签处理逻辑，根据代码显示名称
	 * @return SKIP_BODY
	 */
	public int doStartTag() {
		return SKIP_BODY;
	}
    /**
     * doEndTag
     * @return EVAL_PAGE
     * @throws JspException JspException
     */
	public int doEndTag() throws JspException {
		try {
			JspWriter writer = null;
			try {
				writer = this.getPreviousOut();
			} catch (Exception e1) {
				writer = pageContext.getOut();
			}
		    String result = "";
			if(format==null || format.intValue()>4 || format.intValue()<1){
			    format = new Integer(DateUtils.HYPHEN_DISPLAY_DATE);
			}
			String dateIn = null;
			if(value instanceof Date){
			    dateIn = DateUtils.getDateFormat((Date) value, "yyyyMMddHHmmss");
			} else {
			    dateIn = value==null?"":value.toString();
			}
			if(dateIn!=null && !dateIn.equals("")){
	            result = DateUtils.toDisplayStr(dateIn, format.intValue());
			}
			if(length!=null && length.intValue()<result.length() && length.intValue()>0){
			    result = result.substring(0, length.intValue());
			}
			if(result==null){
			    result = "";
			} else if(length!=null && length.intValue()<result.length() && length.intValue()>0){
                result = result.substring(0, length.intValue());
            }
			try {
				writer.print(result);
				result = null;
			} catch (Exception e) {
				e.printStackTrace();
			}
			return EVAL_PAGE;
		} catch (Exception e) {
			return EVAL_PAGE;
		}
	}

	/** 
	 * release
	 * @see javax.servlet.jsp.tagext.BodyTagSupport#release()
	 */
	public void release() {
		super.release();
	}

    public Object getValue() {
        return value;
    }
    public void setValue(Object value) {
        this.value = value;
    }
    public Integer getFormat() {
        return format;
    }
    public void setFormat(Integer format) {
        this.format = format;
    }
    public Integer getLength() {
        return length;
    }
    public void setLength(Integer length) {
        this.length = length;
    }

}
